/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.arqsw.servicios;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import uy.edu.ort.arqsw.domino.PaginaWeb;
import uy.edu.ort.arqsw.util.UtilLog;
import uy.edu.ort.arqsw.util.UtilXML;

/**
 *
 * @author Victor
 */
@WebService(serviceName = "PaginaWebWS")
@DeclareRoles({"usuario", "administrador"})
@Stateless()
public class PaginaWebWS {
    @EJB
    PaginaWebFacadeLocal paginawebEJB;

    @RolesAllowed({"usuario", "administrador"})
    @WebMethod(operationName = "obtenerTodasPaginasWeb")
    public String obtenerTodasPaginasWeb() {
        ResultadoPaginasWeb res = new ResultadoPaginasWeb();

        try {
            res.setResultado(paginawebEJB.obtenerTodas());
            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
        } catch (Exception ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            res.setResultadoCorrecto(false);
            res.setDescripcion(ex.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoPaginaWeb(res, true);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            cadena = ex.getMessage();
        }
        
        return cadena;
    }

    @RolesAllowed({"usuario", "administrador"})
    @WebMethod(operationName = "buscarPaginaWeb")
    public String buscarPaginaWeb(@WebParam(name = "strPaginaWeb") String strPaginaWeb) {
        ResultadoPaginasWeb res = new ResultadoPaginasWeb();

        try {
            PaginaWeb paginaweb = UtilXML.parsePaginaWeb(strPaginaWeb, true);
            res.setResultado(paginawebEJB.buscar(paginaweb.getFecha(), paginaweb.getTitulo(), paginaweb.getContenido()));
            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            res.setResultadoCorrecto(false);
            res.setDescripcion(ex.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoPaginaWeb(res, true);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            cadena = ex.getMessage();
        }
        
        return cadena;
    }
    
    @RolesAllowed("administrador")
    @WebMethod(operationName = "crearPaginaWeb")
    public String crearPaginaWeb(@WebParam(name = "strPaginaWeb") String strPaginaWeb) {
        ResultadoPaginasWeb res = new ResultadoPaginasWeb();
        
        try {
            PaginaWeb paginaweb = UtilXML.parsePaginaWeb(strPaginaWeb, true);
            //paginaweb.setId(Long.MIN_VALUE);
            paginawebEJB.crear(paginaweb);

            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
            res.getResultado().add(paginaweb);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            res.setResultadoCorrecto(false);
            res.setDescripcion(ex.getMessage());            
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoPaginaWeb(res, true);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            cadena = ex.getMessage();
        }
        
        return cadena;
    }

    @RolesAllowed("administrador")
    @WebMethod(operationName = "removerPaginaWeb")
    public String removerPaginaWeb(@WebParam(name = "strPaginaWeb") String strPaginaWeb) {
        ResultadoPaginasWeb res = new ResultadoPaginasWeb();
        
        
        try {
            PaginaWeb paginaweb = UtilXML.parsePaginaWeb(strPaginaWeb, true);
            paginawebEJB.remover(paginaweb);

            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
            res.getResultado().add(paginaweb);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            res.setResultadoCorrecto(false);
            res.setDescripcion(ex.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoPaginaWeb(res, true);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            cadena = ex.getMessage();
        }
        
        return cadena;
    }

    @RolesAllowed("administrador")
    @WebMethod(operationName = "editarPaginaWeb")
    public String editarPaginaWeb(@WebParam(name = "strPaginaWebOriginal") String strPaginaWebOriginal,
                                  @WebParam(name = "strPaginaWebModificada") String strPaginaWebModificada) {
        ResultadoPaginasWeb res = new ResultadoPaginasWeb();
        
        try {
            PaginaWeb paginaweboriginal = UtilXML.parsePaginaWeb(strPaginaWebOriginal, true);
            PaginaWeb paginawebmodificada = UtilXML.parsePaginaWeb(strPaginaWebModificada, true);
            
            paginawebEJB.editar(paginaweboriginal, paginawebmodificada);

            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
            res.getResultado().add(paginawebmodificada);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            res.setResultadoCorrecto(false);
            res.setDescripcion(ex.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoPaginaWeb(res, true);
        } catch (Throwable ex) {
            UtilLog.log.error(ex.getStackTrace().toString());
            cadena = ex.getMessage();
        }
        
        return cadena;
    }
}
